from django.db import models

# Create your models here.
class Userinfo(models.Model):
    username = models.CharField(verbose_name='用户名', max_length=32)
    email = models.EmailField(verbose_name='邮箱', max_length=32)
    password = models.CharField(verbose_name='密码', max_length=64)
    phone_num = models.CharField(verbose_name='手机号', max_length=32)

    class Meta:
        verbose_name = '用户信息'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

class PricePolicy(models.Model):
    """价格策略"""
    category_choices = (
        (1, '免费版'),
        (2, '收费版'),
        (3, '其他'),
    )
    category = models.SmallIntegerField(verbose_name='收费类型', default=2, choices=category_choices)
    title = models.CharField(verbose_name='标题', max_length=32)
    price = models.PositiveIntegerField(verbose_name='价格', )
    project_num = models.PositiveIntegerField(verbose_name='项目数', )
    project_member = models.PositiveIntegerField(verbose_name='项目成员数', )
    project_space = models.PositiveIntegerField(verbose_name='单项空间', )
    per_file_size = models.PositiveIntegerField(verbose_name='单文件大小(M)', )
    create_datetime = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

    class Meta:
        verbose_name = '价格策略'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.category

class Transaction(models.Model):
    """交易记录"""
    status_choices = (
        (1, '未支付'),
        (2, '已支付'),
    )
    status = models.SmallIntegerField(verbose_name='状态', choices=status_choices)

    order = models.CharField(verbose_name='订单号', max_length=64, unique=True)
    user = models.ForeignKey(verbose_name='用户', to='Userinfo')
    price_policy = models.ForeignKey(verbose_name='价格策略', to='PricePolicy')

    count = models.IntegerField(verbose_name='数量(年)', help_text='0表示无限期')
    price = models.IntegerField(verbose_name='实际支付价格')
    start_datetime = models.DateTimeField(verbose_name='开始时间', null=True, blank=True)
    end_datetime = models.DateTimeField(verbose_name='结束时间', null=True, blank=True)
    creat_datetime = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

    class Meta:
        verbose_name = '交易记录'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.user.username

class Project(models.Model):
    """项目表"""
    color_choices = (
        (1, '#56b8eb'),
        (2, '#f28033'),
        (3, '#ebc656'),
        (4, '#a2d148'),
        (5, '#20bfa4'),
        (6, '#7461c2'),
        (7, '#20bfa3'),
    )
    name = models.CharField(verbose_name='项目名', max_length=32)
    color = models.SmallIntegerField(verbose_name='颜色', choices=color_choices, default=1)
    desc = models.CharField(verbose_name='项目描述', max_length=255, null=True, blank=True)
    user_space = models.IntegerField(verbose_name='项目已使用空间', default=0)
    star = models.BooleanField(verbose_name='星标', default=False)

    join_count = models.SmallIntegerField(verbose_name='参与人数', default=1)
    creator = models.ForeignKey(verbose_name='创建者', to='Userinfo')
    create_datetime = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

    class Meta:
        verbose_name = '项目'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

class ProjectUser(models.Model):
    """项目参与者"""
    user = models.ForeignKey(verbose_name='参与者', to='Userinfo')
    project = models.ForeignKey(verbose_name='项目', to='Project')
    star = models.BooleanField(verbose_name='星标', default=False)

    # invitee = models.ForeignKey(verbose_name='邀请者', to='Userinfo', related_name='b')
    create_datetime = models.DateTimeField(verbose_name='加入时间', auto_now_add=True)

class Wiki(models.Model):
    project = models.ForeignKey(verbose_name='项目', to='Project')
    title = models.CharField(verbose_name='标题', max_length=32)
    content = models.TextField(verbose_name='内容')
    # 子关联
    parent = models.ForeignKey(verbose_name='父文章', to='self', null=True, blank=True, related_name='children')
    # 等级深度
    depth = models.IntegerField(verbose_name='文章级别', null=True, blank=True)


    def __str__(self):
        return self.title